class CorporativosController < ApplicationController
  def index
    list
    render :action => 'list'
  end

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
    :redirect_to => { :action => :list }

  def list
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)
    
    if perfil_nacional?
      @corporativos = Corporativo.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'nombre_comercial'
    elsif mando_medio?
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      conditions[:status_id] = 0
      
      @no_autorizados = Corporativo.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'nombre_comercial', :conditions => conditions
      
      conditions[:status_id] = 1
      
      @corporativos = Corporativo.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'nombre_comercial', :conditions => conditions
    else
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      conditions[:status_id] = 1
      @corporativos = Corporativo.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'nombre_comercial', :conditions => conditions
      
    end

  end

  def show
    @corporativo = Corporativo.find(params[:id])
  end

  def new
    @corporativo = Corporativo.new
    @delegaciones = []
    @status = Catalogo.find_by_nombre('Status Items').entradas_catalogo
  end

  def create
    @corporativo = Corporativo.new(params[:corporativo])
    @corporativo.ejecutivo_id = session[:user]
    
    if perfil_ejecutivo?
      @corporativo.status_id = 0
    elsif mando_medio?
      @corporativo.status_id = 1
    end
    
    if @corporativo.save
      flash[:notice] = 'El Corporativo se creo correctamente.'
      redirect_to :action => 'list'
    else
      @delegaciones = []    
      render :action => 'new'
    end
  end

  def edit
    @corporativo = Corporativo.find(params[:id])
    @delegaciones = Catalogo.all_values('Estados',@corporativo.estado_id)
    @status = Catalogo.find_by_nombre('Status Items').entradas_catalogo

  end

  def update
    @corporativo = Corporativo.find(params[:id])
    if @corporativo.update_attributes(params[:corporativo])
      flash[:notice] = 'El Corporativo se actualizo correctamente.'
      redirect_to :action => 'show', :id => @corporativo
    else
      render :action => 'edit'
    end
  end

  def destroy
    Corporativo.find(params[:id]).destroy
    redirect_to :action => 'list'
  end
  
  def estado_changed
    unless params[:id].blank?
      logger.debug 'Estado changed ' + params[:id]

      @coleccion = Catalogo.all_values('Estados',params[:id])
    else
      @coleccion = []
    end

    render :partial => "delegaciones", :locals => { :coleccion => @coleccion }
  end
  
  def show_cdc
    @corporativo = Corporativo.find(params[:id])
    conditions = {}
    conditions[:corporativo_id] = nil
    conditions[:status_id] = 1
    @centros = Centro.find(:all, :conditions => conditions)
    
  end
  
  def add_cdc
    @corporativo = Corporativo.find(params[:id])
    @centro = Centro.find(params[:seleccion][:centro_id])
    
    @centro.corporativo_id = params[:id]
    
    if @centro.save
      flash[:notice] = "El Centro de Consumo se agrego correctamente."
      
      redirect_to :action => "show", :id => @corporativo
    else
      raise
    end
  end
  
  def txt_export
    conditions = {}
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)
    
    if perfil_nacional?
      @corporativos = Corporativo.find(:all)
    else
      conditions[:ejecutivo_id] = these_children
      @corporativos = Corporativo.find(:all, :conditions => conditions)
      
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      csv << ["Ejecutivo", "Nombre Comercial", "Razon Social", "RFC", "Fecha de Aniversario",
        "Calle", "Numero Exterior", "Nmero Interior", "Colonia", "Ciudad",
        "Codigo Postal", "Estado", "Delegacion/Municipio", "Telefono Lada", "Telefono Numero", "Telefono Extension",
        "Fax Lada", "Fax Numero", "Fax Extension","Nombre Contacto"
      ]
      @corporativos.each do |corporativo|
        csv << [Ejecutivo.find(corporativo.ejecutivo_id).nombre_completo, corporativo.nombre_comercial, corporativo.razon_social, corporativo.rfc, corporativo.fecha_aniversario,
          corporativo.calle, corporativo.num_exterior, corporativo.num_interior, corporativo.colonia, corporativo.ciudad,
          corporativo.codigo_postal, Catalogo.valor('Estados',corporativo.estado_id), Catalogo.valor('Delegaciones Municipios',corporativo.delegacion_municipio_id), corporativo.telefono_lada, corporativo.telefono_numero, corporativo.telefono_extension,
          corporativo.fax_lada, corporativo.fax_numero, corporativo.fax_extension, corporativo.contacto
        ]
      end
    end
    
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'corporativos.csv')
    
  end
  
  def deshabilitar
    corporativo = Corporativo.find(params[:id])
    
    corporativo.status_id = 0
    
    if corporativo.save
      flash[:notice] = "Corporativo deshabilitado..."
      
      redirect_to :action => "index"
    end
  end
  
  def list_by_id
    conditions = {}
    conditions[:status_id] = 1
    conditions[:ejecutivo_id] = params[:id]
    
    @corporativos = Corporativo.find(:all, :conditions => conditions)
    
    render :action => "list"
  end
  
  def search
    unless params[:search].blank?
      conditions = ["concatenado LIKE ?","%#{params[:search]}%"] unless params[:search].nil?
      @corporativos = BusquedaCorporativo.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'nombre_comercial',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      @corporativos_count = @corporativos.size
      logger.info "Resultado de la busqueda: #{@corporativos_count} corporativos encontrados"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
end
